package com.hzncc.flowable_diboot.custom_field.service.customfields.impl;

import com.googlecode.aviator.code.interpreter.ir.PopIR;
import com.hzncc.flowable_diboot.custom_field.entity.CustomTableConfig;
import com.hzncc.flowable_diboot.custom_field.entity.customfields.TableFieldShowItem;
import com.hzncc.flowable_diboot.custom_field.service.CustomTableConfigService;
import com.hzncc.flowable_diboot.custom_field.service.customfields.TableFieldShowItemService;
import com.hzncc.flowable_diboot.custom_field.vo.CustomTableConfigDetailVO;
import com.hzncc.flowable_diboot.custom_field.vo.CustomTableItemConfigListVO;
import com.hzncc.flowable_diboot.custom_field.vo.customfields.TableFieldShowConfigDetailVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import com.diboot.core.util.S;
import com.diboot.core.service.impl.BaseServiceImpl;

import com.hzncc.flowable_diboot.custom_field.entity.customfields.TableFieldShowConfig;

import com.hzncc.flowable_diboot.custom_field.mapper.customfields.TableFieldShowConfigMapper;
import com.hzncc.flowable_diboot.custom_field.service.customfields.TableFieldShowConfigService;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;


/**
* 字段显示配置 相关Service实现类
* @author MyName
* @version 1.0
* @date 2024-11-20
* Copyright © MyCorp
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class TableFieldShowConfigServiceImpl extends BaseServiceImpl<TableFieldShowConfigMapper, TableFieldShowConfig> implements TableFieldShowConfigService {

    private final CustomTableConfigService customTableConfigService;

    private final TableFieldShowItemService tableFieldShowItemService;

    /**
     * 获取用户自定义的表格字段显示配置详情
     *
     * @param userId 用户ID，用于查询用户特定的配置
     * @param code 表格代码，用于标识特定的表格
     * @return 返回TableFieldShowConfigDetailVO对象，包含用户自定义的表格字段显示配置详情如果用户没有自定义配置，则返回基于默认配置创建的新配置对象
     */
    @Override
    public TableFieldShowConfigDetailVO getOwnConfig(String userId, String code) {
        // 查询用户自定义的表格字段显示配置详情
        TableFieldShowConfigDetailVO config = this.getViewObject(lambdaQuery().eq(TableFieldShowConfig::getUserId, userId)
                .eq(TableFieldShowConfig::getTableCode, code), TableFieldShowConfigDetailVO.class);
        if (config == null){
            // 如果用户没有自定义配置，则尝试获取默认的自定义表格配置
            CustomTableConfigDetailVO tableConfig = customTableConfigService.getViewObject(customTableConfigService.lambdaQuery().eq(CustomTableConfig::getCode, code), CustomTableConfigDetailVO.class);
            if (tableConfig != null){
                // 基于默认配置创建新的用户自定义配置对象
                config = new TableFieldShowConfigDetailVO();
                config.setUserId(userId);
                config.setTableCode(code);
                config.setCustomTableConfigId(tableConfig.getId());
                // 复制默认配置中的表格项配置到用户自定义配置中
                List<CustomTableItemConfigListVO> tableItemConfigs = tableConfig.getTableItemConfigs();
                List<TableFieldShowItem> fieldItems = tableItemConfigs.stream().map(e -> {
                    TableFieldShowItem item = new TableFieldShowItem();
                    item.setCustomtableItemId(e.getId());
                    item.setFieldName(e.getFieldName());
                    item.setFieldLabel(e.getFieldLabel());
                    item.setWidth(e.getWidth());
                    item.setViewable(e.getViewable());
                    item.setExportable(e.getExportable());
                    return item;
                }).toList();
                config.setFieldItems(fieldItems);
            }
        }
        return config;
    }

    @Override
    public Boolean saveOwnConfig(TableFieldShowConfigDetailVO ownConfig) {
        if (this.createOrUpdateEntity(ownConfig)){
            List<TableFieldShowItem> fieldItems = ownConfig.getFieldItems();
            fieldItems.forEach(e -> e.setTableFieldShowId(ownConfig.getId()));
            return tableFieldShowItemService.createOrUpdateEntities(fieldItems);
        }
        return false;
    }

}